00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00035
00036 require_once (PATH_TO_ROOT."common/classes/class.email.inc.php");
00037 require_once (PATH_TO_ROOT."common/classes/class.bbcode.inc.php");
00038 require_once (PATH_TO_ROOT."roleplay/classes/class.roleartefacts.inc.php");
00039
00049 class Messaging {
00054 private $userID;
00055
00060 private $role;
00061
00067 private $db;
00068
00073 private $translate;
00074
00081 public function __construct($userID) {
00082
00083 $this->userID = $userID;
00084
00085
00086 global $db;
00087 $this->db = $db;
00088
00089 $this->translate = getTranslate("messaging");
00090
00091 if (empty($_POST)) $_POST["asEmail"] = 1;
00092
00093 if (isset($_SESSION["roleID"])) {
00094 $this->role = new Role($_SESSION["roleID"]);
00095 }
00096 }
00097
00108 public function sendMessage(&$recipients, $subject, $message, $asEmail = 0, $saveInOutbox = true) {
00109 global $settings;
00110 $success = true;
00111 $allRecipients = explode(";", Data::gpcUnescape($recipients));
00112 $count = count($allRecipients);
00113
00114 for ($i = 0 ; $i < $count ; $i++) {
00115 $allRecipients[$i] = trim($allRecipients[$i]);
00116 if ($allRecipients[$i] == "") unset($allRecipients[$i]);
00117 }
00118
00119 $allRecipients = array_unique($allRecipients);
00120 $outboxRecipients = $recipientsSuccess = $recipientsFailed = "";
00121 for ($i = 0 ; $i < $count ; $i++) {
00122 if (!isset($allRecipients[$i])) continue;
00123 $recipientID = -1;
00124
00125 $shortNamesError = "";
00126 $recipient = explode(",", trim($allRecipients[$i]));
00127 if (!isset($recipient[1])) {
00128 $recipientResult = $this->db->get_results("SELECT ID, ShortName, Vorname
00129 FROM user
00130 WHERE user.Nachname='".Data::toMysql(trim($recipient[0]), false) ."'");
00131 } elseif (!isset($recipient[2])) {
00132 $recipientResult = $this->db->get_results("SELECT ID, ShortName, Vorname
00133 FROM user
00134 WHERE user.Nachname='".Data::toMysql(trim($recipient[0]), false) ."'
00135 AND user.Vorname='".Data::toMysql(trim($recipient[1]), false) ."'");
00136 } else {
00137 $sql = "SELECT ID, Vorname, ShortName
00138 FROM user
00139 WHERE user.Nachname='".Data::toMysql(trim($recipient[0]), false) ."'
00140 AND user.Vorname='".Data::toMysql(trim($recipient[1]), false) ."'";
00141 $sqlAdd = "";
00142
00143
00144
00145 if(is_numeric(trim($recipient[2]))) {
00146 $sqlAdd = " AND user.ID='".Data::toMysql(trim($recipient[2]), false) ."'";
00147 }
00148 else {
00149 $sqlAdd = " AND user.ShortName='".Data::toMysql(trim($recipient[2]), false) ."'";
00150 }
00151 $sql .= $sqlAdd;
00152 $recipientResult = $this->db->get_results($sql);
00153 }
00154 $anzahl = $this->db->num_rows;
00155 if ($anzahl > 0) {
00156 foreach($recipientResult as $recipientRow) {
00157 $recipientID = $recipientRow->ID;
00158 $correctRecipientString = $recipient[0].", ".$recipientRow->Vorname.", ".$recipientRow->ShortName;
00159 $shortNamesError.= "<a href='#' onclick='javascript:addUserToRecipients(\"".$correctRecipientString."\")'>".$correctRecipientString."</a><br />";
00160 }
00161 }
00162 if ($recipientID > 0) $isIgnored = $this->db->get_var("SELECT isIgnored FROM messaging_buddylist WHERE userID=".$recipientID." AND buddyID=".$this->userID);
00163 else $isIgnored = "0";
00164 if ($anzahl > 1) {
00165 $errorMessage = sprintf($this->translate->_("Benutzer nicht eindeutig ermittelbar. Bitte folgende Schreibweise verwenden:<br/><em>Nachname, Vorname, <strong>User-ID oder User-Kennung</strong></em><br/><br/>Verfuegbare Empfaenger:<br /> %1\$s"),$shortNamesError);
00166 Output::errorMessage($errorMessage);
00167 $success = false;
00168 $recipientsFailed = $recipientsFailed."; ".trim($allRecipients[$i]);
00169 } elseif ($isIgnored == "1") {
00170 $errorMessage = sprintf($this->translate->_("Sie stehen bei %1\$s auf der Ignoreliste."), trim($allRecipients[$i]));
00171 Output::errorMessage($errorMessage);
00172 $success = false;
00173 } elseif ($recipientID > 0) {
00174 $this->db->query("INSERT INTO messaging_inbox (userID, authorID, subject, message, date)
00175 VALUES ('".$recipientID."','".$this->userID."','".Data::toMysql($subject, false) ."','".Data::toMysql($message, false) ."',".time() .")");
00176 if (isset($this->role)) RoleArtefacts::setRoleForItem(PM, $this->db->insert_id, $_SESSION["roleID"]);
00177 $outboxRecipients.= $recipientID.";";
00178 $recipientsSuccess.= $allRecipients[$i]." | ";
00179 $recipientIDs[] = $recipientID;
00180 } else {
00181 $errorMessage = sprintf($this->translate->_("Benutzer %1\$s wurde nicht gefunden."), trim($allRecipients[$i]));
00182 Output::errorMessage($errorMessage);
00183 $success = false;
00184 $recipientsFailed.= "; ".trim($allRecipients[$i]);
00185 }
00186 }
00187
00188 if ($asEmail && isset($recipientIDs)) {
00189 global $settings;
00190 $portalName = $settings["label"];
00191 $bbcode = new BBCode(false);
00192 $email = new Email($this->userID);
00193 $userName = $this->db->get_var("SELECT CONCAT(Vorname, ' ', Nachname) FROM user WHERE ID='".$this->userID."'");
00194 $mailSubject = html_entity_decode($subject, ENT_COMPAT, $settings["charset"]) . " (" . $settings["label"].": Neue private Nachricht)";
00195 $mailMessage = sprintf($this->translate->_("Guten Tag,\n %1\$s hat eine private Nachricht in %2\$s für Sie verfasst:\n\n--------------------\n%3\$s\n--------------------"), $userName, $portalName, html_entity_decode($bbcode->stripTags($message), ENT_COMPAT, "ISO-8859-15"));
00196
00197 if ($email->sendMessageToUser($mailSubject, $recipientIDs, $mailMessage, false)) Output::echoMessage("Email zur Benachrichtigung versandt.");
00198 else Output::errorMessage($this->translate->_("Email zur Benachrichtigung konnte nicht versandt werden."));
00199 }
00200 if (!$asEmail && isset($recipientIDs)) {
00201 global $settings;
00202 $portalName = $settings["label"];
00203 $bbcode = new BBCode(false);
00204 $email = new Email($this->userID);
00205 $userName = $this->db->get_var("SELECT CONCAT(Vorname, ' ', Nachname) FROM user WHERE ID='".$this->userID."'");
00206 $mailSubject = html_entity_decode($subject, ENT_COMPAT, $settings["charset"]) . " (" . $settings["label"].": Neue private Nachricht)";
00207 $mailMessage = sprintf($this->translate->_("Guten Tag,\n %1\$s hat eine private Nachricht in %2\$s für Sie verfasst:\n\n--------------------\n%3\$s\n--------------------"), $userName, $portalName, html_entity_decode($bbcode->stripTags($message), ENT_COMPAT, "ISO-8859-15"));
00208
00209 foreach ($recipientIDs as $recipient) {
00210 if ($this->pmAsEmail($recipient)) {
00211 $email->sendMessageToUser($mailSubject, array($recipient), $mailMessage, false);
00212 }
00213 }
00214 }
00215 if (strlen($outboxRecipients) > 0 && $saveInOutbox) {
00216 $this->db->query("INSERT INTO messaging_outbox (userID, recipientID, subject, message, date)
00217 VALUES ('".$this->userID."','".$outboxRecipients."','".Data::toMysql($subject, false) ."','".Data::toMysql($message, false) ."',".time() .")");
00218 }
00219 if (strlen($recipientsSuccess) > 0) {
00220 Output::echoMessage($this->translate->_("An folgende BenutzerInnen wurde die Nachricht gesendet:")." | ".Data::toHTML($recipientsSuccess));
00221 }
00222 if (!$success) $recipients = substr($recipientsFailed, 2);
00223 return $success;
00224 }
00225
00229 private function pmAsEmail( $userID ) {
00230 return $this->db->get_var("SELECT pm_as_email FROM user WHERE ID=$userID");
00231 }
00232
00240 public function sameNameUsers($userID) {
00241 $countUsers = (int)$this->db->get_var("SELECT COUNT(*) FROM user u1, user u2 WHERE u1.Vorname=u2.Vorname AND u1.Nachname=u2.Nachname AND u1.ID<>u2.ID AND u1.ID='$userID'");
00242 return $countUsers;
00243 }
00244
00250 function markMessageAsRead($messageID) {
00251 $messageID = intval($messageID);
00252 $message = $this->db->get_row("SELECT * FROM messaging_inbox WHERE ID='$messageID' AND userID='".$this->userID."'");
00253
00254 if (!is_null($message) && $message->isRead == 0) {
00255 $this->db->query("UPDATE messaging_inbox SET isRead='1' WHERE ID='$messageID' AND userID='".$this->userID."'");
00256 }
00257 }
00258
00266 function deleteMessage($messageID, $type) {
00267 $messageID = intval($messageID);
00268 if ($type == "inbox") {
00269 $this->db->query("DELETE FROM messaging_inbox WHERE ID='".$messageID."' AND userID='".$this->userID."'");
00270 if ($this->db->rows_affected) RoleArtefacts::deleteItem(PM, (int)$messageID);
00271 } elseif ($type == "outbox") {
00272 $this->db->query("DELETE FROM messaging_outbox WHERE ID='".$messageID."' AND userID=".$this->userID);
00273 }
00274 if($this->db->num_rows > 0) {
00275 return true;
00276 }
00277 else {
00278 return false;
00279 }
00280 }
00281
00289 public function archiveMessage($messageID, $type) {
00290 $messageID = intval($messageID);
00291 if ($type == "inbox") $this->db->query("UPDATE messaging_inbox SET isArchived ='1' WHERE ID='".$messageID."' AND userID=".$this->userID);
00292 elseif ($type == "outbox") $this->db->query("UPDATE messaging_outbox SET isArchived ='1' WHERE ID='".$messageID."' AND userID=".$this->userID);
00293 }
00294
00303 public function getRecipients($RecipientsID, $limit, $breaks) {
00304 $strWHERE = "";
00305 $recipients = explode(";", $RecipientsID);
00306 $count = count($recipients) -1;
00307 for ($i = 0 ; $i < $count && $i <= ($limit-1) ; $i++) {
00308 if ($strWHERE == "") $strWHERE = $strWHERE." user.ID =".$recipients[$i];
00309 else $strWHERE = $strWHERE." OR user.ID =".$recipients[$i];
00310 }
00311 $empfaenger = $this->db->get_results("SELECT user.ID, user.Nachname, user.Vorname FROM user WHERE ".$strWHERE." ORDER BY user.Nachname");
00312 $breakCount = 0;
00313 $strEmpfaenger = "";
00314 foreach($empfaenger as $einzelner) {
00315 $einzelner->Nachname = Data::toHTML($einzelner->Nachname, false);
00316 $einzelner->Vorname = Data::toHTML($einzelner->Vorname, false);
00317 if ($breakCount < $breaks) $strEmpfaenger.= "<<a href='".PATH_TO_ROOT."user/homepage.php?user=".$einzelner->ID."'>".$einzelner->Nachname.", ".$einzelner->Vorname."</a>> ";
00318 else {
00319 $strEmpfaenger.= "<br /><<a href='".PATH_TO_ROOT."user/homepage.php?user=".$einzelner->ID."'>".$einzelner->Nachname.", ".$einzelner->Vorname."</a>> ";
00320 $breakCount = 0;
00321 }
00322 $breakCount++;
00323 }
00324 if ((count($recipients) -1) > $limit) $strEmpfaenger = $strEmpfaenger." ...";
00325 return $strEmpfaenger;
00326 }
00333 public function getOrderByLink($feld) {
00334 if (isset($_GET["sortby"]) && $feld == $_GET["sortby"]) {
00335 if (isset($_GET["order"]) && $_GET["order"] == "ab") {
00336 $orderlink = "auf";
00337 } else {
00338 $orderlink = "ab";
00339 }
00340 } else {
00341 $orderlink = "auf";
00342 }
00343 return $orderlink;
00344 }
00345
00351 public function getUserID() {
00352 if(!empty($this->userID)) {
00353 return $this->userID;
00354 }
00355 else
00356 return NULL;
00357 }
00358
00364 public function getRole() {
00365 if(!empty($this->role)) {
00366 return $this->role;
00367 }
00368 else
00369 return NULL;
00370 }
00371
00377 public function getDB() {
00378 if(!empty($this->db)) {
00379 return $this->db;
00380 }
00381 else
00382 return NULL;
00383 }
00384
00390 public static function includeMessagingCSSFile() {
00391 global $HEADER_INLINE_AFTER_CSS;
00392 if(!isset($HEADER_INLINE_AFTER_CSS)) $HEADER_INLINE_AFTER_CSS = "";
00393 $HEADER_INLINE_AFTER_CSS .= '<link href="'.PATH_TO_ROOT.'messaging/messaging.css" rel="stylesheet" type="text/css" />';
00394 }
00395
00403 public static function getAutoSearchJavaScript() {
00404 return '<script type="text/javascript" src="'.PATH_TO_ROOT.'messaging/js/messaging_autosearch.js"></script>';
00405 }
00406
00411 public static function setGlobalVariables() {
00413 if ( ! defined("USE_SSL") ) define("USE_SSL", true);
00414 define("PATH_TO_MESSAGE_NEW", "messaging_new.php");
00415 define("PATH_TO_MESSAGE_IN", "messaging_in.php");
00416 define("PATH_TO_MESSAGE_OUT", "messaging_out.php");
00417 define("PATH_TO_MESSAGE_DETAIL", "messaging_detail.php");
00418 define("PATH_TO_BUDDYMANAGEMENT", "buddymanagement.php");
00419 }
00420 }